/**
 * @desc 
 *      1.忽略小数点 如1.3表示1 和3
 *      2.数字之前出现偶数个数字则为正数，奇数个数字则为负数
 * 
 * @example 
 *      A1CD2E33    ==> 36
 *      A-1B--2C--D6E   ===> 8-1=7
 * 思路：
 *      1.遍历时遇到数字与非数字的处理：
 *          非数字：
 *              判断当前扫描的数值的正负关系
 *              累加处理后的数字 res += num;
 *          数字：
 *              123
 *              当一次扫描到123时，怎么把字符串123转换为数字。
 *              且，123数字的正负与他之前的正负符号标记有关。即全局的posi
 *              1  ==》 1
 *              2 ===》 12 《=== 1*10+2
 *              3 ===》 123 《=== 12*10+3
 *              当前值cur.
 *              之前的数值num
 *              新的num为 num += num*10 + cur 
 *              如果是负数：
 *                  cur即为负数 num初始化为0
 *              -123
 *              1 ===》 0*10 + (-1) = -1
 *              12 ===> -1*10+(-2) == -12 
 */
strnumSum('A1CD2E33D23')
 function strnumSum(str){
    if(str==null){
        return 0;
    }
    let 
        res = 0,
        num = 0,
        Flag = true;// 正数
    for(let i=0;i<str.length;i++){
        let cur = str[i]- '0';
        if(isNaN(cur)){
            res+=num;// 计算上次的结果
            num=0;// 将上次的num数值存储置为0
            if(str[i]==='-'){
                if(i-1>-1&&str[i-1]==='-'){
                    Flag = !Flag;
                }else{
                    Flag = false;
                }
            }else{
                Flag = true;
            }
        }else{
            num = num*10+(Flag?cur:-cur);
        }
    }   
    // 将计算当前数值放在了 else数字里，计算result放在了if里
    // 避免当最后一个为数值时而后面再无字符，漏失一次计算的机会
    res+=num;
    return res;
 }